package controllers

import (
	"github.com/gin-gonic/gin"
	"go_pure_admin_api/dto"
	"go_pure_admin_api/models"
)

type DeptController struct {
	BaseController
}

// GetDeptList 获取部门列表
// @Summary 获取部门列表
// @Description 获取系统中所有部门的列表
// @Tags 部门模块
// @Accept json
// @Produce json
// @Security Bearer
// @Success 200 {object} controllers.ResponseJson "获取部门列表成功"
// @Failure 500 {object} controllers.ResponseJson "获取部门列表失败"
// @Router /dept/deptList [post]
func (d *DeptController) GetDeptList(c *gin.Context) {
	deptList, err := models.GetAllDepartmentsList()
	if err != nil {
		d.Fail(c, 500, "获取部门列表失败:"+err.Error(), nil)
		return
	}
	d.Success(c, "获取部门列表成功", deptList)
}

// CreateDept 创建部门
// @Summary 创建部门
// @Description 创建新部门
// @Tags 部门模块
// @Accept json
// @Produce json
// @Security Bearer
// @Param createDept body dto.CreateDeptDto true "创建部门参数"
// @Success 200 {object} controllers.ResponseJson "创建部门成功"
// @Failure 400 {object} controllers.ResponseJson "参数错误"
// @Failure 500 {object} controllers.ResponseJson "创建部门失败"
// @Router /dept/createDept [post]
func (d *DeptController) CreateDept(c *gin.Context) {
	var data dto.CreateDeptDto
	if err := c.ShouldBind(&data); err != nil {
		d.Fail(c, 400, "参数错误:"+err.Error(), nil)
		return
	}
	var dept models.Departments
	err := dept.CreateDepartment(data)
	if err != nil {
		d.Fail(c, 500, "创建部门失败+"+err.Error(), nil)
		return
	}
	d.Success(c, "创建部门成功", nil)
}

// UpdateDept 更新部门信息
// @Summary 更新部门信息
// @Description 更新部门的基本信息
// @Tags 部门模块
// @Accept json
// @Produce json
// @Security Bearer
// @Param updateDept body dto.UpdateDeptDto true "更新部门参数"
// @Success 200 {object} controllers.ResponseJson "更新部门成功"
// @Failure 400 {object} controllers.ResponseJson "参数错误"
// @Failure 500 {object} controllers.ResponseJson "更新部门失败"
// @Router /dept/updateDept [post]
func (d *DeptController) UpdateDept(c *gin.Context) {
	var data dto.UpdateDeptDto
	if err := c.ShouldBind(&data); err != nil {
		d.Fail(c, 400, "参数错误:"+err.Error(), nil)
		return
	}
	var dept models.Departments
	err := dept.UpdateDepartment(data)
	if err != nil {
		d.Fail(c, 500, "更新部门失败:"+err.Error(), nil)
		return
	}
	d.Success(c, "更新部门成功", nil)
}

// DeleteDept 删除部门
// @Summary 删除部门
// @Description 根据部门ID删除部门
// @Tags 部门模块
// @Accept json
// @Produce json
// @Security Bearer
// @Param deleteDept body dto.DeleteDeptDto true "删除部门参数"
// @Success 200 {object} controllers.ResponseJson "删除部门成功"
// @Failure 400 {object} controllers.ResponseJson "参数错误"
// @Failure 500 {object} controllers.ResponseJson "删除部门失败"
// @Router /dept/deleteDept [post]
func (d *DeptController) DeleteDept(c *gin.Context) {
	data := dto.DeleteDeptDto{}
	if err := c.ShouldBind(&data); err != nil {
		d.Fail(c, 400, "参数错误:"+err.Error(), nil)
		return
	}
	var dept models.Departments
	err := dept.DeleteDeptByID(data.ID)
	if err != nil {
		d.Fail(c, 500, "删除部门失败:"+err.Error(), nil)
		return
	}
	d.Success(c, "删除部门成功", nil)
}
